package com.xxy.queue;

/**
 * 队列：先进先出
 *1.加入数据时，先判断队列是空还是满
 * 2.加入后，将尾指针往后移
 * @author xxy
 * 用数组实现队列,按照定义来，这样的数组只能用一次，为了实现多用，后面就有了循环队列
 * @create 2020 10 20 9:04
 */
public class ArrayQueueDemo {

}
  //创建一个队列的类
 class ArrayQueue{
      private int maxSize;//队列的最大容量
      private int front;//队列的头部
      private int rear;//队列的尾部
      private int[] arr;//用于存放数据，模拟队列
      //队列的构造器
      public ArrayQueue(int maxSize){
          this.maxSize =maxSize;
          front = -1;
          rear =-1;
          arr = new int[maxSize];
      }
      //判断队列是否为满
      public boolean isFull(){
          return rear ==maxSize-1;
      }
      //判断队列是否为空
      public boolean isEmpty(){
          return rear==front;
      }
      //向队列添加数据
      public void add(int n){
          if(isFull()){
              System.out.println("队列满！");
              return;
          }
          rear++;
          arr[rear]=n;
      }
      // 获取队列的数据
      public int getQueue(){
          //判断是否为空
          if(isEmpty()){
              throw new RuntimeException("队列为空");
          }
          front ++;
          return arr[front];
      }
      //打印数组
      public void showQueue(){
          if(isEmpty()){
              System.out.println("队列为空");
              return ;
          }
          for(int i=0;i<arr.length;i++){
              System.out.println("arr["+i+"]"+"="+arr[i]);
          }
      }
      //获得头指针的数据
      public int headQueue(){
          if(isEmpty()){
              throw new RuntimeException("队列为空，没有数据");
          }
          return arr[front+1];
      }


  }
